using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;

namespace TestImport.View.PlatoBestellingen
{
    public partial class PlatoBestellingCreatie : Form
    {
        private bool isAlleenPlatoBoeken = true;
        private string filterTekst = "";
        private DataView dv;
        private DataView dv1;
        private string status;
        private bool isPlato;
        private bool metRaming = true;
        private bool metLeerlingBestelling = true;
        


        public PlatoBestellingCreatie()
        {
            InitializeComponent();
            this.BackColor = InstParameters.Default.schermkleur;
        }

        public PlatoBestellingCreatie(bool isAlleenPlatoBoeken)
        {
            InitializeComponent();
            this.BackColor = InstParameters.Default.schermkleur;
            this.isAlleenPlatoBoeken = isAlleenPlatoBoeken;
            isPlato = isAlleenPlatoBoeken;
            if (isPlato) Text = "Creatie PLATO bestelling";
            else Text = "Creatie NIET-PLATO bestelling";
        }


        private void PlatoBestellingCreatie_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Uitgever' table. You can move, or remove it, as needed.
            this.uitgeverTableAdapter.Fill(this.onsBoekenPakketDataSet.Uitgever);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Leerling' table. You can move, or remove it, as needed.
            this.leerlingTableAdapter.Fill(this.onsBoekenPakketDataSet.Leerling);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.LeverancierBesteldAantallen' table. You can move, or remove it, as needed.
            this.leverancierBesteldAantallenTableAdapter.Fill(this.onsBoekenPakketDataSet.LeverancierBesteldAantallen);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Boeksoort' table. You can move, or remove it, as needed.
            this.boeksoortTableAdapter.Fill(this.onsBoekenPakketDataSet.Boeksoort);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Categorie' table. You can move, or remove it, as needed.
            this.categorieTableAdapter.Fill(this.onsBoekenPakketDataSet.Categorie);
            // TODO: This line of code loads data into the 'onsBoekenPakketDataSet.Groep' table. You can move, or remove it, as needed.
            this.groepTableAdapter.Fill(this.onsBoekenPakketDataSet.Groep);
           
            if (isAlleenPlatoBoeken) { leverancierBesteldAantallenBindingSource.Filter = "(aBoek = True or isBestelbaarBijPlato = True)"; filterTekst = "(aBoek = True or isBestelbaarBijPlato = True)"; }
            else {leverancierBesteldAantallenBindingSource.Filter = "aBoek = False"; filterTekst = "aBoek = False";}
            dv = leverancierBesteldAantallenBindingSource.List as DataView;
            dv1 = uitgeverBindingSource.List as DataView;
            this.gbFilter.Text = "Alle boeken";
            instellenVereenvoudiging();
           /* dgvBestellingLeerling.Visible = false;
            dgvBerekendeBestellingViaLeerling.Visible = false;
            dgvTeBestellenViaLeerling.Visible = false;*/
            leerlingDataGridView.Visible = false;
            lblLeerling.Visible = false;
            btnRetour.Enabled = false;
            btnAnnulatieBestelling.Enabled = false;
            uncheckFilter();
            opzoekenAantallen();
            berekenAantallen();
            

        }

        private void instellenVereenvoudiging()
        {
            rbtBestelling.Checked = false; rbtRaming.Checked = true;
            if (InstParameters.Default.vllBestelViaRaming) { rbtRaming.Checked = false; rbtRaming.Visible = false; rbtBestelling.Checked = true; metRaming = false; }
            if (InstParameters.Default.vllBestelViaLeerling) { rbtBestelling.Visible = false; rbtBestelling.Checked = false; metLeerlingBestelling = false; }
            rbtRaming_CheckedChanged(null, null);
        }


        private void leverancierBesteldAantallenDataGridView_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                int vBoekID = int.Parse(leverancierBesteldAantallenDataGridView.CurrentRow.Cells["dgvBoekID"].Value.ToString());
                toonGroepen(vBoekID);
                toonLeerlingen(vBoekID);
            }
            catch (Exception ex) { ;}
        }

        private void toonGroepen(int vBoekID)
        {
            DataTable dt = groepTableAdapter.GetBoekGebruiktInGroep(vBoekID);
            this.groepDataGridView.DataSource = dt;
            //groepTableAdapter.FillByBoekGebruiktInGroep(onsBoekenPakketDataSet.Groep, vBoekID);
        }

        private void toonLeerlingen(int vBoekID)
        {
            leerlingTableAdapter.FillByLeerlingBesteltBoek(onsBoekenPakketDataSet.Leerling, vBoekID);
        }

        private void txtBegin_TextChanged(object sender, EventArgs e)
        {
            
            String text = txtBegin.Text.Replace("\'", "\'\'");
            String filterTekstH = filterTekst +" and Titel like \'%" + (text + "%\'");
            
            //this.boekBindingSource.Filter = filterTekst;
            this.gbFilter.Text = "Deel van titel " + text.ToUpper();
            this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            berekenAantallen();
        }

        private void cmbCategorieZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            String zoek = cmbCategorieZoek.SelectedValue.ToString();
            String filterTekstH = filterTekst + " and CategorieCode = " + "'" + zoek + "'";
            
            String text = ((DataRowView)cmbCategorieZoek.SelectedItem).Row["categorieOmschrijving"].ToString(); ;
            this.gbFilter.Text = "Categorie " + text.ToUpper();
            this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            berekenAantallen();
            
        }

        private void cmbUitgeverZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            String zoek = cmbUitgeverZoek.SelectedValue.ToString();
            String filterTekstH = filterTekst + " and uitgeverCode = " + "'" + zoek + "'";

            String text = ((DataRowView)cmbUitgeverZoek.SelectedItem).Row["uitgeverNaam"].ToString(); ;
            this.gbFilter.Text = "Uitgever " + text.ToUpper();
            this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            berekenAantallen();
        }

               
        private void cmbBoeksoortZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            String zoek = cmbBoeksoortZoek.SelectedValue.ToString();
            String filterTekstH = filterTekst + " and boeksoortCode = " + "'" + zoek + "'";

            String text = ((DataRowView)cmbBoeksoortZoek.SelectedItem).Row["boeksoortNaam"].ToString(); ;
            this.gbFilter.Text = "Boeksoort " + text.ToUpper();
            this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            berekenAantallen();
        }

        private void cmbGroepZoek_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                //Text += "olla ";
                int boeklijstID = -1;
                foreach (DataRow dr in boeklijstTableAdapter.GetGroepCodeID(cmbGroepZoek.SelectedValue.ToString()))
                {
                    boeklijstID = (int)dr["boeklijstID"];
                }
                //Text += " " + cmbGroepZoek.SelectedValue.ToString() + " " + boeklijstID + " ";
                List<int> boekIDs = new List<int>();
                if (boeklijstID != -1)
                {
                    
                    foreach (DataRow dr in boeklijstItemTableAdapter.GetDataByBoeklijstID(boeklijstID))
                        boekIDs.Add((int)dr["boekID"]);
                    //Text += boekIDs.Count.ToString();
                }
                int teller = 0;
                String filterTekstH = filterTekst + " and (boekID = ";
                foreach (int i in boekIDs)
                {
                    filterTekstH +=  i ;
                    if (++teller < boekIDs.Count)
                    {
                        filterTekstH += " or boekID = ";
                    }
                    else
                    {
                        filterTekstH += ")";
                    }
                }
                //Text = filterTekstH;
                String text = ((DataRowView)cmbGroepZoek.SelectedItem).Row["groepCode"].ToString(); ;
                this.gbFilter.Text = "Boekenlijst van groep " + text.ToUpper();
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
                berekenAantallen();
            }
            catch (Exception ex) { ;}
           
          
        }

        private void btnAlleBoeken_Click(object sender, EventArgs e)
        {
            String filterTekstH = filterTekst;
            this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            this.gbFilter.Text = "Alle boeken";
            berekenAantallen();
        }

        private void opzoekenAantallen()
        {
            int index = 0;
           // Text += "aantalrij " + dv.Count;
            int vboekID = 0;
            int vramingAantal = 0;
            object oramingAantal = null;
            int vbesteldAantal = 0;
            object obesteldAantal = null;
            int vbesteldPlatoAantal = 0;
            object obesteldPlatoAantal = null;
            int vretourPlatoAantal = 0;
            object oretourPlatoAantal = null;
            int vgeleverdAantal = 0;
            object ogeleverdAantal = null;
            foreach (DataRowView drv in dv)
            {
                vboekID = (int)drv["boekID"];
                vramingAantal = 0; vbesteldAantal = 0;
                //opzoeken ramingen per boek
                if (metRaming)
                {
                    try
                    {
                        oramingAantal = leverancierBesteldAantallenTableAdapter.GetRamingAantal(vboekID);
                        if (oramingAantal.Equals(DBNull.Value))
                            vramingAantal = 0;
                        else
                            vramingAantal = int.Parse(oramingAantal.ToString());
                    }
                    catch (Exception ex) { vramingAantal = 0; }
                } 
                drv["raming"] = vramingAantal;
                //opzoeken leerlingbestellingen per boek
                if (metLeerlingBestelling)
                {
                    try
                    {
                        obesteldAantal = leverancierBesteldAantallenTableAdapter.GetBesteldAantal(vboekID);
                        if (obesteldAantal.Equals(DBNull.Value))
                            vbesteldAantal = 0;
                        else
                            vbesteldAantal = int.Parse(obesteldAantal.ToString());
                    }
                    catch (Exception ex) { vbesteldAantal = 0; }
                }
                drv["besteldLeerling"] = vbesteldAantal;
                
                //opzoeken Platobestellingen per boek
                try
                {
                    obesteldPlatoAantal = leverancierBesteldAantallenTableAdapter.GetBestelBijPlatoAantal(vboekID);
                    if (obesteldPlatoAantal.Equals(DBNull.Value))
                        vbesteldPlatoAantal = 0;
                    else
                        vbesteldPlatoAantal = int.Parse(obesteldPlatoAantal.ToString());
                }
                catch (Exception ex) { vbesteldPlatoAantal = 0; }
                drv["besteldPlato"] = vbesteldPlatoAantal;
                //opzoeken Platoretours per boek
                try
                {
                    oretourPlatoAantal = leverancierBesteldAantallenTableAdapter.GetRetourNaarPlatoAantal(vboekID);
                    if (oretourPlatoAantal.Equals(DBNull.Value))
                        vretourPlatoAantal = 0;
                    else
                        vretourPlatoAantal = int.Parse(oretourPlatoAantal.ToString());
                }
                catch (Exception ex) { vretourPlatoAantal = 0; }
                drv["retourPlato"] = vretourPlatoAantal;

                //opzoeken leveringen per boek
                try
                {
                    ogeleverdAantal = leverancierBesteldAantallenTableAdapter.GetGeleverdAantal(vboekID);
                    if (ogeleverdAantal.Equals(DBNull.Value))
                        vgeleverdAantal = 0;
                    else
                        vgeleverdAantal = int.Parse(ogeleverdAantal.ToString());
                }
                catch (Exception ex) { vgeleverdAantal = 0; }
                drv["geleverd"] = vgeleverdAantal;
                //berekenen theoretische bestelling
                drv["berekendeBestelling"] = berekenBerekendeBestelling(index, true);
                drv["berekendeBestellingViaLeerling"] = berekenBerekendeBestelling(index, false);
                drv["teBestellen"] = berekenBerekendeBestelling(index,true);
                drv["teBestellenViaLeerling"] = berekenBerekendeBestelling(index, false);
                index++;
                drv.EndEdit();
            }
        }

        private void herberekenAantallenKolom()
        {
            int index = 0;
            foreach (DataRowView drv in dv)
            {
                drv["berekendeBestelling"] = berekenBerekendeBestelling(index, true);
                drv["berekendeBestellingViaLeerling"] = berekenBerekendeBestelling(index, false);
                drv.EndEdit();
                index++;
            }
        }

        // Vervangen door versie hieronder
        private int berekenBerekendeBestellingOud(int index, bool viaRaming )
        {
            int vAantal = 0;
            int terug = 0;
            try
            {
                int nodig = 0;
                if (viaRaming)
                {
                    nodig = int.Parse(dv[index]["raming"].ToString()) + int.Parse(dv[index]["reserve"].ToString()) - int.Parse(dv[index]["voorraad1"].ToString());
                }
                else
                {
                    nodig = int.Parse(dv[index]["besteldLeerling"].ToString()) + int.Parse(dv[index]["reserve"].ToString()) - int.Parse(dv[index]["voorraad1"].ToString());
                }
                int teLeveren = int.Parse(dv[index]["besteldPlato"].ToString()) - int.Parse(dv[index]["geleverd"].ToString());
                int teVeel = int.Parse(dv[index]["besteldPlato"].ToString()) - nodig;
                int retour = 0;
                int annul = 0;
                if (int.Parse(dv[index]["geleverd"].ToString()) > nodig) retour = int.Parse(dv[index]["geleverd"].ToString()) - nodig;
                if (int.Parse(dv[index]["besteldPlato"].ToString()) > nodig)
                {
                    if (teLeveren > 0) annul = Math.Min(teVeel, teLeveren);
                }
                vAantal = nodig - int.Parse(dv[index]["besteldPlato"].ToString());
                if (rbtAnnulatie.Checked)
                {
                    if (annul > 0) terug = annul * (-1);
                }
                else
                {
                    if (rbtRetour.Checked)
                    {
                        if (retour > 0) terug = retour * (-1);
                    }
                    else
                    {
                        if (vAantal > 0) terug = vAantal;
                    }
                }
               
            }
            catch (Exception ex) { ;}
            return terug;
        }

        private int berekenBerekendeBestelling(int index, bool viaRaming)
        {
            int vAantal = 0;
            int terug = 0;
            try
            {
                int nodig = 0;
                if (viaRaming)
                {
                    nodig = int.Parse(dv[index]["raming"].ToString()) + int.Parse(dv[index]["reserve"].ToString()) - int.Parse(dv[index]["voorraad1"].ToString());
                }
                else
                {
                    nodig = int.Parse(dv[index]["besteldLeerling"].ToString()) + int.Parse(dv[index]["reserve"].ToString()) - int.Parse(dv[index]["voorraad1"].ToString());
                }
                int teLeveren = int.Parse(dv[index]["besteldPlato"].ToString()) - int.Parse(dv[index]["geleverd"].ToString());// -int.Parse(dv[index]["retourPlato"].ToString());
                int teVeel = int.Parse(dv[index]["besteldPlato"].ToString()) - nodig;
                int retour = 0;
                int annul = 0;
                int nettoGeleverd = int.Parse(dv[index]["geleverd"].ToString()) - Math.Abs(int.Parse(dv[index]["retourPlato"].ToString()));
                if (nettoGeleverd > nodig) retour = Math.Min(nettoGeleverd - nodig ,nettoGeleverd);
                if (int.Parse(dv[index]["besteldPlato"].ToString()) > nodig)
                {
                    if (teLeveren > 0) annul = Math.Min(teVeel, teLeveren) - Math.Abs(int.Parse(dv[index]["retourPlato"].ToString()));
                }
                if (nodig < nettoGeleverd) vAantal = 0;
                else
                    vAantal = nodig - int.Parse(dv[index]["besteldPlato"].ToString());
                if (rbtAnnulatie.Checked)
                {
                    if (annul > 0) terug = annul * (-1);
                }
                else
                {
                    if (rbtRetour.Checked)
                    {
                        if (retour > 0) terug = retour * (-1);
                    }
                    else
                    {
                        if (vAantal > 0) terug = vAantal;
                    }
                }

            }
            catch (Exception ex) { ;}
            return terug;
        }




        private void PlatoBestellingCreatie_FormClosed(object sender, FormClosedEventArgs e)
        {
            try
            {
                leverancierBesteldAantallenTableAdapter.Update(this.onsBoekenPakketDataSet.LeverancierBesteldAantallen);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
             
        }

        private void rbtRaming_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtRaming.Checked)
            {
                dgvBestellingLeerling.Visible = false;
                dgvRaming.Visible = true;
                dgvBerekendeBestellingViaLeerling.Visible = false;
                dgvBerekendeBestelling.Visible = true;
                dgvTeBestellen.Visible = true;
                dgvTeBestellenViaLeerling.Visible = false;
                leerlingDataGridView.Visible = false;
                lblLeerling.Visible = false;
              
            }
            if (rbtBestelling.Checked)
            {
                dgvBestellingLeerling.Visible = true;
                dgvRaming.Visible = false;
                dgvBerekendeBestellingViaLeerling.Visible = true;
                dgvBerekendeBestelling.Visible = false;
                dgvTeBestellen.Visible = false;
                dgvTeBestellenViaLeerling.Visible = true;
                leerlingDataGridView.Visible = true;
                lblLeerling.Visible = true;
            }
            berekenAantallen();
        }

        private void leverancierBesteldAantallenDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (leverancierBesteldAantallenDataGridView.CurrentCell.OwningColumn.Name.Equals("dgvVoorraad") ||
                     leverancierBesteldAantallenDataGridView.CurrentCell.OwningColumn.Name.Equals("dgvReserve"))
                {
                    int index = leverancierBesteldAantallenDataGridView.CurrentRow.Index;
                    dv[index].EndEdit();
                    dv[index]["berekendeBestelling"] = berekenBerekendeBestelling(index, true);
                    dv[index]["berekendeBestellingViaLeerling"] = berekenBerekendeBestelling(index, false);
                    //dv[index]["teBestellen"] = berekenBerekendeBestelling(index, true);
                    //dv[index]["teBestellenViaLeerling"] = berekenBerekendeBestelling(index, false);
                    
                }
                berekenAantallen();
            }
            catch (Exception ex) {;}

        }

        private void leverancierBesteldAantallenDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            
            if (leverancierBesteldAantallenDataGridView.Columns[e.ColumnIndex].Name == "dgvTeBestellen" ||
                 leverancierBesteldAantallenDataGridView.Columns[e.ColumnIndex].Name == "dgvTeBestellenViaLeerling" ||
                 leverancierBesteldAantallenDataGridView.Columns[e.ColumnIndex].Name == "dgvBerekendeBestelling" ||
                 leverancierBesteldAantallenDataGridView.Columns[e.ColumnIndex].Name == "dgvBerekendeBestellingViaLeerling" )
            {
                  try
                    {
                int vbesteld = int.Parse(leverancierBesteldAantallenDataGridView.Rows[e.RowIndex].Cells["dgvBestellingPlato"].Value.ToString());
                int vgeleverd = int.Parse(leverancierBesteldAantallenDataGridView.Rows[e.RowIndex].Cells["dgvLevering"].Value.ToString());

                bool isRetour = rbtRetour.Checked;
                bool isAnnul = rbtAnnulatie.Checked;
                int vsaldo = vbesteld - vgeleverd;
                if (e.Value != null)
                {
                   
                  
                        string stringValue = e.Value.ToString();
                        if (int.Parse(stringValue) != 0)
                        {
                            e.Value = stringValue;
                            e.FormattingApplied = true;
                            if (int.Parse(stringValue) > 0)
                            {
                                e.CellStyle.ForeColor = Color.Blue;
                            }
                            if (int.Parse(stringValue) < 0 && isAnnul) e.CellStyle.ForeColor = Color.Green;
                            if (int.Parse(stringValue) < 0 && isRetour) e.CellStyle.ForeColor = Color.Red;
                            
                        }
                   
                }
            }
            catch (Exception ex) { }
            }

            if (leverancierBesteldAantallenDataGridView.Columns[e.ColumnIndex].Name == "dgvTeBestellen" ||
                 leverancierBesteldAantallenDataGridView.Columns[e.ColumnIndex].Name == "dgvTeBestellenViaLeerling" )
                
            {
                try
                {
                    int vSaldo1 = Math.Abs(int.Parse(leverancierBesteldAantallenDataGridView.Rows[e.RowIndex].Cells["dgvTeBestellen"].Value.ToString()))- Math.Abs(int.Parse(leverancierBesteldAantallenDataGridView.Rows[e.RowIndex].Cells["dgvBerekendeBestelling"].Value.ToString()));
                    int vSaldo2 = Math.Abs(int.Parse(leverancierBesteldAantallenDataGridView.Rows[e.RowIndex].Cells["dgvTeBestellenViaLeerling"].Value.ToString()))- Math.Abs(int.Parse(leverancierBesteldAantallenDataGridView.Rows[e.RowIndex].Cells["dgvBerekendeBestellingViaLeerling"].Value.ToString()));

                    bool isRaming = rbtRaming.Checked;
                    
                    
                    if (e.Value != null)
                    {


                        string stringValue = e.Value.ToString();
                        if (int.Parse(stringValue) != 0)
                        {
                            e.Value = stringValue;
                            e.FormattingApplied = true;
                            if (vSaldo1 > 0 && isRaming || vSaldo2 > 0 && !isRaming)
                            {
                                e.CellStyle.BackColor = Color.LightCoral;
                            }
                           

                        }

                    }
                }
                catch (Exception ex) { }
            }
        }

        private void btnFilterAantallen_Click(object sender, EventArgs e)
        {
            btnAlleBoeken_Click(null, null);
            if (rbtBerekendNeg.Checked)
            {
                herberekenAantallenKolom();
                String filterTekstH = filterTekst + " and berekendeBestelling < 0 ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and berekendeBestellingViaLeerling < 0 ";
                this.gbFilterBis.Text = "Berekende bestelling < 0";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            }
            if (rbtBerekendNul.Checked)
            {
                herberekenAantallenKolom();
                String filterTekstH = filterTekst + " and berekendeBestelling = 0 ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and berekendeBestellingViaLeerling = 0 ";
                this.gbFilterBis.Text = "Berekende bestelling = 0";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            }
            if(rbtBerekendPos.Checked)
            {
                herberekenAantallenKolom();
                String filterTekstH = filterTekst + " and berekendeBestelling > 0 ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and berekendeBestellingViaLeerling > 0 ";
                this.gbFilterBis.Text = "Berekende bestelling > 0";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            }
            if(rbtBerekendVerschillend.Checked)
            {
                herberekenAantallenKolom();
                String filterTekstH = filterTekst + " and berekendeBestelling <> teBestellen ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and berekendeBestellingViaLeerling < teBestellenViaLeerling ";
                this.gbFilterBis.Text = "Berekende bestelling <> Te bestellen";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            }
            if(rbtTebestellenNeg.Checked)
            {
                String filterTekstH = filterTekst + " and teBestellen < 0 ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and teBestellenViaLeerling < 0 ";
                this.gbFilterBis.Text = "Te bestellen < 0";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            }
            if(rbtTebestellenNul.Checked)
            {
                String filterTekstH = filterTekst + " and teBestellen = 0 ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and teBestellenViaLeerling = 0 ";
                this.gbFilterBis.Text = "Te bestellen = 0";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            }
            if (rbtTebestellenPos.Checked)
            {
                String filterTekstH = filterTekst + " and teBestellen > 0 ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and teBestellenViaLeerling > 0 ";
                this.gbFilterBis.Text = "Te bestellen > 0";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
            }
            if (rbtAnnulatie.Checked)
            {
                herberekenAantallenKolom();
                String filterTekstH = filterTekst + " and berekendeBestelling < 0 ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and berekendeBestellingViaLeerling < 0 ";
                this.gbFilterBis.Text = "Mogelijke annulaties";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
                btnRetour.Enabled = false;
                btnAnnulatieBestelling.Enabled = true;
                btnRegistreerBestelling.Enabled = false;

                leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellen"].HeaderText = "Te annuleren";
                leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellenViaLeerling"].HeaderText = "Te annuleren";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestelling"].HeaderText = "Berekende annulatie";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestellingViaLeerling"].HeaderText = "Berekende annulatie";
            }                
            if (rbtRetour.Checked)
            {
                herberekenAantallenKolom();
                String filterTekstH = filterTekst + " and berekendeBestelling < 0 ";
                if (rbtBestelling.Checked) filterTekstH = filterTekst + " and berekendeBestellingViaLeerling < 0 ";
                this.gbFilterBis.Text = "Mogelijke retours";
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
                btnRetour.Enabled = true;
                btnAnnulatieBestelling.Enabled = false;
                btnRegistreerBestelling.Enabled = false;
                leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellen"].HeaderText = "Te retourneren";
                leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellenViaLeerling"].HeaderText = "Te retourneren";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestelling"].HeaderText = "Berekende retour";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestellingViaLeerling"].HeaderText = "Berekende retour";
            }

            berekenAantallen();
        }

        private void uncheckFilter()
        {
            gbFilterBis.Text = "Alle boeken";
            rbtBerekendNeg.Checked = false;
            rbtBerekendNul.Checked = false;
            rbtBerekendPos.Checked = false;
            rbtBerekendVerschillend.Checked = false;
            rbtTebestellenNeg.Checked = false;
            rbtTebestellenNul.Checked = false;
            rbtTebestellenPos.Checked = false;
            rbtRetour.Checked = false;
            rbtAnnulatie.Checked = false;
            herberekenAantallenKolom();
        }

        private void btnAlleBoekenBis_Click(object sender, EventArgs e)
        {
            btnAlleBoeken_Click(null, null);
            uncheckFilter();
            berekenAantallen();
            btnRetour.Enabled = false;
            btnAnnulatieBestelling.Enabled = false;
            btnRegistreerBestelling.Enabled = true;
            leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellen"].HeaderText = "Te bestellen";
            leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellenViaLeerling"].HeaderText = "Te bestellen";
            leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestelling"].HeaderText = "Berekende bestelling";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestellingViaLeerling"].HeaderText = "Berekende bestelling";
            
        }

        private void btnTeBestellenISBerekening_Click(object sender, EventArgs e)
        {
            DialogResult antwoord = MessageBox.Show("Wens je ALLE te bestellen aantallen vervangen door de berekende bestelling aantallen??", "OVERSCHRIJVEN TE BESTELLEN AANTALLEN", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (antwoord == DialogResult.Yes)
            {
                String filterTekstH = filterTekst;
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
                foreach (DataRowView drv in dv)
                {
                    drv["teBestellen"] = drv["berekendeBestelling"];
                    drv["teBestellenViaLeerling"] = drv["berekendeBestellingViaLeerling"];
                }
                leverancierBesteldAantallenBindingSource.EndEdit();
                berekenAantallen();
            }
        }

        private void btnTeBetellenOpNul_Click(object sender, EventArgs e)
        {
            DialogResult antwoord = MessageBox.Show("Wens je ALLE te bestellen aantallen vervangen door 0 ??", "OVERSCHRIJVEN TE BESTELLEN AANTALLEN", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (antwoord == DialogResult.Yes)
            {
                String filterTekstH = filterTekst;
                this.leverancierBesteldAantallenBindingSource.Filter = filterTekstH;
                foreach (DataRowView drv in dv)
                {
                    drv["teBestellen"] = 0;
                    drv["teBestellenViaLeerling"] = 0;
                    drv.EndEdit();
                }
                leverancierBesteldAantallenBindingSource.EndEdit();
                berekenAantallen();
            }
        }

        private void berekenAantallen()
        {
            int voorraad = 0;
            int reserve = 0;
            int aantalTitels = 0;
            int berekend = 0;
            int teBestellen = 0;
            foreach (DataRowView drv in dv)
            {
                aantalTitels++;
                try { voorraad += int.Parse(drv["voorraad1"].ToString()); }
                catch (Exception ex) { ;}
                try { reserve+= int.Parse(drv["reserve"].ToString()); }
                catch (Exception ex) { ;}
                if (rbtRaming.Checked)
                {
                    try { berekend += int.Parse(drv["berekendeBestelling"].ToString()); }
                    catch (Exception ex) { ;}
                    try { teBestellen += int.Parse(drv["teBestellen"].ToString()); }
                    catch (Exception ex) { ;}
                }
                else
                {
                    try { berekend += int.Parse(drv["berekendeBestellingViaLeerling"].ToString()); }
                    catch (Exception ex) { ;}
                    try { teBestellen += int.Parse(drv["teBestellenViaLeerling"].ToString()); }
                    catch (Exception ex) { ;}
                }


            }
            lblAantalTitels.Text = "AANTAL TITELS       : " + aantalTitels.ToString().PadLeft(4);
            lblVoorraad.Text = "VOORRAAD            : " + voorraad.ToString().PadLeft(4);
            lblReserve.Text = "RESERVE             : " + reserve.ToString().PadLeft(4);
            lblBerekend.Text =   "BEREKENDE BESTELLING: " + berekend.ToString().PadLeft(4);
            lblTeBestellen.Text = "TE BESTELLEN        : " + teBestellen.ToString().PadLeft(4);
        }

        private void btnRegistreerBestelling_Click(object sender, EventArgs e)
        {
            string status = "BESTELLING";
            string lijst = "";
            int teller = 1;
            int aantal = 0;
            int totaalBestelling = 0;
            leverancierBesteldAantallenBindingSource.EndEdit();
            foreach (DataRowView drv in dv)
            {
                if (rbtRaming.Checked)
                {
                    try
                    {
                        aantal = int.Parse(drv["teBestellen"].ToString());
                        if (aantal > 0)
                        {
                            lijst += teller.ToString().PadLeft(4)+". "+drv["isbnNr"].ToString().PadRight(15) + drv["titel"].ToString().PadRight(65, '.') + drv["categorieCode"].ToString().PadRight(7,'.')  + drv["uitgeverNaam"].ToString().PadRight(17)+ aantal.ToString().PadLeft(5) + Environment.NewLine;
                            teller++;
                            totaalBestelling += aantal;
                        }
                    }
                    catch (Exception ex) { ;}
                }
                else
                {
                    try
                    {
                        aantal = int.Parse(drv["teBestellenViaLeerling"].ToString());
                        if (aantal > 0)
                        {
                            lijst += teller.ToString().PadLeft(4) + ". " + drv["isbnNr"].ToString().PadRight(15) + drv["titel"].ToString().PadRight(65, '.') + drv["categorieCode"].ToString().PadRight(7) + drv["uitgeverNaam"].ToString().PadRight(17) + aantal.ToString().PadLeft(5) + Environment.NewLine;
                            teller++;
                            totaalBestelling += aantal;
                        }
                    }
                    catch (Exception ex) { ;}
                }//endif
            }//endforeach
            //MessageBox.Show(lijst);
            string totaalLijn = "Aantal titels: " + (teller-1) + "   " + "Aantal boeken: " + totaalBestelling;
            PlatoBestellingRegistratie pl = new PlatoBestellingRegistratie(this, totaalLijn, lijst, status);
            pl.ShowDialog();
        }

        public void registreerBestelling(DateTime bestelDatum, string opmerkingIntern, string opmerkingPlato,string sorteer)
        {
            string lijst = "";
            int teller = 1;
            int totaalBestelling = 0;
            string bestandsNaam = @".\Bestellingen\bestel_" + bestelDatum.Day + "_" + bestelDatum.Month + "_" + bestelDatum.Year + "_" + bestelDatum.Hour + "_" + bestelDatum.Minute;
            //isPlato = true;
            bool isRetour = false;
            bool isAnnulatie = false;
            int vstatus = 0;
            int aantal = 0;
            string vuitgever = "";
            try
            {
                bestellingTableAdapter.InsertBestelling(bestelDatum, isPlato, isRetour, isAnnulatie, bestandsNaam, opmerkingIntern, opmerkingPlato, vstatus);
                int bestelID = (int)bestellingTableAdapter.GetMaxBestellingID();
               
                if (sorteer.Equals("Categorie")) dv.Sort = "categorieCode";
                if (sorteer.Equals("Titel")) dv.Sort = "titel";
                if (sorteer.Equals("Uitgever")) dv.Sort = "uitgeverCode";
                
                //leverancierBesteldAantallenBindingSource.EndEdit();
                foreach (DataRowView drv in dv)
                {
                    if (rbtRaming.Checked)
                    {
                        aantal = int.Parse(drv["teBestellen"].ToString());
                    }
                    else
                    {
                        aantal = int.Parse(drv["teBestellenViaLeerling"].ToString());
                    }
                    try
                    {
                        if (aantal > 0)
                        {
                            //vuitgever = zoekUitgever(drv["uitgeverCode"].ToString());
                            vuitgever = drv["uitgeverNaam"].ToString();
                            lijst += teller.ToString().PadLeft(3) + ". " + aantal.ToString().PadLeft(5)+"  "+drv["categorieCode"].ToString().PadRight(7, '.')+drv["isbnNr"].ToString().PadRight(15) + drv["titel"].ToString().PadRight(65, '.') + vuitgever.PadRight(17)+ Environment.NewLine;
                            teller++;
                            totaalBestelling += aantal;
                            bestellingItemTableAdapter.InsertBestellingItem(bestelID, int.Parse(drv["boekID"].ToString()), aantal, 0);
                        }
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message);}
                   
                }//endforeach
                string totaalLijn = "Aantal titels: " + (teller - 1) + "   " + "Aantal boeken: " + totaalBestelling;
                string bestand = "Bestelling van " + InstParameters.Default.naamSchool + "  " + InstParameters.Default.straatSchool + "  " + InstParameters.Default.stadSchool + Environment.NewLine;
                bestand += "Besteldatum: " + bestelDatum.Date.ToString().Substring(0, 10) + Environment.NewLine;
                bestand += totaalLijn + Environment.NewLine + Environment.NewLine;
                bestand += opmerkingPlato + Environment.NewLine + Environment.NewLine;
                bestand += lijst;

                try
                {
                    FileStream aFile = new FileStream(bestandsNaam, FileMode.Create);
                    StreamWriter sw = new StreamWriter(aFile);
                    sw.Write(bestand);
                    sw.Flush();
                    sw.Close();

                }
                catch (IOException e)
                {
                    MessageBox.Show("Er is een probleem opgetreden bij het registreren van de bestellijst");
                    return;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            this.Close();                      
        }

        public void registreerRetour_annulatie(DateTime bestelDatum, string opmerkingIntern, string opmerkingPlato, string sorteer)
        {
            int vbesteld = 0;
            int vgeleverd = 0;
            string lijst = "";
            int teller = 1;
            int totaalBestelling = 0;
            bool isRetour = false;
            bool isAnnulatie = false;
            string bestand ="";
            string bestandsNaam = "";
            if (status.Equals("RETOUR"))
            {
                bestandsNaam = @".\Bestellingen\retour_" + bestelDatum.Day + "_" + bestelDatum.Month + "_" + bestelDatum.Year + "_" + bestelDatum.Hour + "_" + bestelDatum.Minute ;
                isRetour = true;
                isAnnulatie = false;
                bestand = "Retour van " + InstParameters.Default.naamSchool + "  " + InstParameters.Default.straatSchool + "  " + InstParameters.Default.stadSchool + Environment.NewLine;
                bestand += "Retourdatum: " + bestelDatum.Date.ToString().Substring(0, 10) + Environment.NewLine;
            }
            else
            {
                bestandsNaam = @".\Bestellingen\annulatie_" + bestelDatum.Day + "_" + bestelDatum.Month + "_" + bestelDatum.Year + "_" + bestelDatum.Hour + "_" + bestelDatum.Minute ;
                isRetour = false;
                isAnnulatie = true;
                bestand = "Annulatie van bestelling van " + InstParameters.Default.naamSchool + "  " + InstParameters.Default.straatSchool + "  " + InstParameters.Default.stadSchool + Environment.NewLine;
                bestand += "Annulatiedatum: " + bestelDatum.Date.ToString().Substring(0, 10) + Environment.NewLine;
            }
            int vstatus = 0;
            int aantal = 0;
            try
            {
                bestellingTableAdapter.InsertBestelling(bestelDatum, isPlato, isRetour, isAnnulatie, bestandsNaam, opmerkingIntern, opmerkingPlato, vstatus);
                int bestelID = (int)bestellingTableAdapter.GetMaxBestellingID();
                if (sorteer.Equals("Categorie")) dv.Sort = "categorieCode";
                if (sorteer.Equals("Titel")) dv.Sort = "titel";
                if (sorteer.Equals("Uitgever")) dv.Sort = "uitgeverCode";
                foreach (DataRowView drv in dv)
                {
                     if (rbtRaming.Checked)
                    {
                        aantal = int.Parse(drv["teBestellen"].ToString());
                    }
                    else
                    {
                        aantal = int.Parse(drv["teBestellenViaLeerling"].ToString());
                    }
                    if (aantal < 0)
                    {
                        try
                        {
                            vbesteld = int.Parse(drv["besteldPlato"].ToString());
                            vgeleverd = int.Parse(drv["geleverd"].ToString());
                            aantal = Math.Min(Math.Abs(aantal), vgeleverd);
                            if (status.Equals("RETOUR"))
                            {
                                //if (aantal < 0 && vbesteld <= vgeleverd)
                                //{
                                //    aantal = Math.Abs(aantal);
                                lijst += teller.ToString().PadLeft(3) + ". " + aantal.ToString().PadLeft(5) + "  " + drv["categorieCode"].ToString().PadRight(7, '.') + drv["isbnNr"].ToString().PadRight(15) + drv["titel"].ToString().PadRight(65, '.') + drv["uitgeverNaam"].ToString().PadRight(17) + Environment.NewLine;
                                    teller++;
                                    totaalBestelling += aantal;
                                    bestellingItemTableAdapter.InsertBestellingItem(bestelID, int.Parse(drv["boekID"].ToString()), aantal * (-1), 0);
                                //}
                            }
                            else
                            {
                                if (status.Equals("ANNULATIE"))
                                {
                                  //  if (aantal < 0 && vbesteld > vgeleverd)
                                  //  {
                                  //      vannulatieAantal = vbesteld - vgeleverd;
                                  //      if (Math.Abs(aantal) <= vannulatieAantal) aantal = Math.Abs(aantal);
                                  //      else aantal = Math.Abs(vannulatieAantal);
                                        lijst += teller.ToString().PadLeft(3) + ". " + aantal.ToString().PadLeft(5) + "  " + drv["categorieCode"].ToString().PadRight(7, '.') + drv["isbnNr"].ToString().PadRight(15) + drv["titel"].ToString().PadRight(65, '.') + drv["uitgeverNaam"].ToString().PadRight(17) + Environment.NewLine;
                                        teller++;
                                        totaalBestelling += aantal;
                                        bestellingItemTableAdapter.InsertBestellingItem(bestelID, int.Parse(drv["boekID"].ToString()), aantal * (-1), 0);
                                   // }
                                }
                            }

                        }
                        catch (Exception ex) { ;}
                    }

                }//endforeach
                string totaalLijn = "Aantal titels: " + (teller - 1) + "   " + "Aantal boeken: " + totaalBestelling;
               
                bestand += totaalLijn + Environment.NewLine + Environment.NewLine;
                bestand += opmerkingPlato + Environment.NewLine + Environment.NewLine;
                bestand += lijst;

                try
                {
                    FileStream aFile = new FileStream(bestandsNaam, FileMode.Create);
                    StreamWriter sw = new StreamWriter(aFile);
                    sw.Write(bestand);
                    sw.Flush();
                    sw.Close();

                }
                catch (IOException e)
                {
                    MessageBox.Show("Er is een probleem opgetreden bij het registreren van de retour/annulatie lijst");
                    return;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

            //MessageBox.Show(bestand);
            this.Close();
        }

        private void btnRetour_Click(object sender, EventArgs e)
        {
            leverancierBesteldAantallenBindingSource.EndEdit();
            status = "RETOUR";
            verwerkRetour_Annulatie();
        }

        private void btnAnnulatieBestelling_Click(object sender, EventArgs e)
        {
            leverancierBesteldAantallenBindingSource.EndEdit();
            status = "ANNULATIE";
            verwerkRetour_Annulatie();
        }

        private void verwerkRetour_Annulatie()
        {
            string lijst = "";
            int teller = 1;
            int aantal = 0;
            int totaalBestelling = 0;
            int vbesteld = 0;
            int vgeleverd = 0;
            int vannulatieAantal = 0;
            foreach (DataRowView drv in dv)
            {
                if (rbtRaming.Checked)
                {
                    aantal = int.Parse(drv["teBestellen"].ToString());
                }
                else
                {
                     aantal = int.Parse(drv["teBestellenViaLeerling"].ToString());
                }
                if (aantal < 0)
                {
                    try
                    {
                        vbesteld = int.Parse(drv["besteldPlato"].ToString());
                        vgeleverd = int.Parse(drv["geleverd"].ToString());
                        //aantal = Math.Min(Math.Abs(aantal), vgeleverd);
                        aantal = Math.Abs(aantal);
                        if (status.Equals("RETOUR"))
                        {
                            // if (aantal < 0 && vbesteld <= vgeleverd)
                            // {
                            //     aantal = Math.Abs(aantal);
                            lijst += teller.ToString().PadLeft(4) + ". " + drv["isbnNr"].ToString().PadRight(15) + drv["titel"].ToString().PadRight(65, '.') + drv["categorieCode"].ToString().PadRight(7, '.') + drv["uitgeverNaam"].ToString().PadRight(17) + aantal.ToString().PadLeft(5) + Environment.NewLine;
                            teller++;
                            totaalBestelling += aantal;
                            //}
                        }
                        else
                        {
                            if (status.Equals("ANNULATIE"))
                            {
                                //if (aantal < 0 && vbesteld > vgeleverd)
                                //{
                                //    vannulatieAantal = vbesteld - vgeleverd;
                                //    if (Math.Abs(aantal) <= vannulatieAantal) aantal = Math.Abs(aantal);
                                //    else aantal = Math.Abs(vannulatieAantal);
                                lijst += teller.ToString().PadLeft(4) + ". " + drv["isbnNr"].ToString().PadRight(15) + drv["titel"].ToString().PadRight(65, '.') + drv["categorieCode"].ToString().PadRight(7, '.') + drv["uitgeverNaam"].ToString().PadRight(17) + aantal.ToString().PadLeft(5) + Environment.NewLine;
                                teller++;
                                totaalBestelling += aantal;
                                //}
                            }
                        }

                    }
                    catch (Exception ex) { ;}
                }
            }//endforeach
            //MessageBox.Show(lijst);
            string totaalLijn = "Aantal titels: " + (teller - 1) + "   " + "Aantal boeken: " + totaalBestelling;
            PlatoBestellingRegistratie pl = new PlatoBestellingRegistratie(this, totaalLijn, lijst, status);
            pl.ShowDialog();
        }

        private string zoekUitgever(string code)
        {
            foreach (DataRowView drv1 in dv1)
            {
                if (drv1["uitgeverCode"].ToString().Equals(code))
                    return drv1["uitgeverNaam"].ToString();
            }
            return "*** ";
        }

        private void rbtAnnulatie_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtAnnulatie.Checked)
            {
                leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellen"].HeaderText = "Te annuleren";
                leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellenViaLeerling"].HeaderText = "Te annuleren";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestelling"].HeaderText = "Berekende annulatie";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestellingViaLeerling"].HeaderText = "Berekende annulatie";
            }
        }

        private void rbtRetour_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtRetour.Checked)
            {
                leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellen"].HeaderText = "Te retourneren";
                leverancierBesteldAantallenDataGridView.Columns["dgvTeBestellenViaLeerling"].HeaderText = "Te retourneren";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestelling"].HeaderText = "Berekende retour";
                leverancierBesteldAantallenDataGridView.Columns["dgvBerekendeBestellingViaLeerling"].HeaderText = "Berekende retour";
            }
        }

        private void chkVerbergPlato_CheckedChanged(object sender, EventArgs e)
        {
            if (chkVerbergPlato.Checked)
            {
                dgvBestellingPlato.Visible = false;
                dgvRetourPlato.Visible = false;
                dgvLevering.Visible = false;
            }
            else
            {
                dgvBestellingPlato.Visible = true;
                dgvRetourPlato.Visible = true;
                dgvLevering.Visible = true;    
            }
        }

        private void chkVerbergVoorraad_CheckedChanged(object sender, EventArgs e)
        {
            if (chkVerbergVoorraad.Checked)
            {
                dgvVoorraad.Visible = false;
                dgvReserve.Visible = false;
            }
            else
            {
                dgvVoorraad.Visible = true;
                dgvReserve.Visible = true;
            }
        }

       

     }
}

       

        

        

       
       
  